package com.liuweiheng.cloudproviderpayment8002.mq.workQueue;

import com.liuweiheng.cloudproviderpayment8002.util.LogUtil;
import com.liuweiheng.cloudproviderpayment8002.util.RabbitMQUtil;
import com.rabbitmq.client.*;

import java.io.IOException;

public class Consumer2 {

    public static void main(String[] args) {
        Connection connection = null;
        Channel channel = null;
        try {

            connection = RabbitMQUtil.getConnection();

            // 获取连接中的通道
            channel = connection.createChannel();

            channel.basicQos(1);

            /*
             * 通道绑定对应消息队列
             * 参数1：queue 队列名称，若队列不存在，会自动创建
             * 参数2：durable 是否持久化队列，若为false，则会在RabbitMQ关闭时删除当前队列
             * 参数3：exclusive 是否独占队列，即只能在当前连接使用该队列
             * 参数4：autoDelete 是否在消费完后自动删除队列
             * 参数5：额外附加参数
             */
            channel.queueDeclare("workQueue", true, false, false, null);

            /*
             * 消费信息
             * 参数1：queue 队列名称
             * 参数2：autoAck 是否开启消息自动确认机制
             * 参数3：Consumer 消费时的回调接口
             */

            Channel finalChannel = channel;

            channel.basicConsume("workQueue", false, new DefaultConsumer(finalChannel) {
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    try{
                        Thread.sleep(2000);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    System.out.println("Consumer2:" + new String(body));
                    // 手动确认消费完成  参数1:手动确认消息标识  参数2multiple: false 每次确认一个
                    finalChannel.basicAck(envelope.getDeliveryTag(), false);
                }
            });

        } catch (IOException e) {
            LogUtil.error("获取RabbitMQ连接错误");
            e.printStackTrace();
        }
    }
}
